#include"Vertex.h"

Vertex Vertex::operator*(const Matrix& m)
{
	/*pos =m.MultiplyVec4(pos);
	normal = m.MultiplyVec4(normal);
	return *this;*/

	pos.x = pos.x * m.mat[0][0] + pos.y * m.mat[0][1] + pos.z * m.mat[0][2] + pos.w * m.mat[0][3];
	pos.y = pos.x * m.mat[1][0] + pos.y * m.mat[1][1] + pos.z * m.mat[1][2] + pos.w * m.mat[1][3];
	pos.z = pos.x * m.mat[2][0] + pos.y * m.mat[2][1] + pos.z * m.mat[2][2] + pos.w * m.mat[2][3];
	pos.w = pos.x * m.mat[3][0] + pos.y * m.mat[3][1] + pos.z * m.mat[3][2] + pos.w * m.mat[3][3];


	normal.x = normal.x * m.mat[0][0] + normal.y * m.mat[0][1] + normal.z * m.mat[0][2] + normal.w * m.mat[0][3];
	normal.y = normal.x * m.mat[1][0] + normal.y * m.mat[1][1] + normal.z * m.mat[1][2] + normal.w * m.mat[1][3];
	normal.z = normal.x * m.mat[2][0] + normal.y * m.mat[2][1] + normal.z * m.mat[2][2] + normal.w * m.mat[2][3];
	normal.w = normal.x * m.mat[3][0] + normal.y * m.mat[3][1] + normal.z * m.mat[3][2] + normal.w * m.mat[3][3];
	return *this;
}

void Vertex::LerpVertex(Vertex& v1, Vertex& v2, float t)
{
	pos.z = LerpFloat(v1.pos.z, v2.pos.z, t);
	color = Color::Lerp(v1.color, v2.color, t);
	uv.x = LerpFloat(v1.uv.x, v2.uv.x, t);
	uv.y = LerpFloat(v1.uv.y, v2.uv.y, t);
	normal = v1.normal + (v2.normal - v1.normal) * t;

}

void Vertex::Print()
{
	std::cout << "Position: (" << pos.x << ", " << pos.y << ", " << pos.z << ")" << "\n";
	std::cout<<"Color: (" << color.r << ", " << color.g << ", " << color.b << ")" <<std::endl;
}
